package ControlLayer;
import ModelLayer.*;
import ExceptionsPakke.*;
import java.util.ArrayList;

/**
 * 
 * @author (GP3 Project Solutions) 
 * @version (07-06-2011 JSM: Oprettelse af klassen)
 */
public class VareKatalogCtrl
{
    // instans variabler
    private VareKatalog vareKatalog;
    private VareBeskrivelse vareBeskrivelse;
    private LeverandoerRegisterCtrl leverandoerRegisterCtrl;

    /**
     * Konstruktør for objekter af klassen VareKatalogCtrl
     */
    public VareKatalogCtrl()
    {
        // initialisering af instans variabler
        vareKatalog = VareKatalog.getInstance();
        leverandoerRegisterCtrl = new LeverandoerRegisterCtrl();
        vareBeskrivelse = new VareBeskrivelse();
    }
    
    /**
     * Opretter en varebeskrivelse, tilføjer en leverandør til beskrivelsen
     * og tilføjer varebeskrivelsen til VareKatalog
     * @param beskrivelse Varens beskrivelse
     * @param leverandoerId Leverandørens id
     * @param leverandoerNavn Leverandørens navn
     * @param vareId Varens id
     * @param navn Varens navn
     * @param pris Varens pris
     * @param lokation Varens lokation på lageret
     * @param tilbudsPris Varens tilbudspris
     */
    public void opretVareBeskrivelse(String beskrivelse,int leverandoerId, String leverandoerNavn, int vareId, String navn, double pris, String lokation, double tilbudsPris) throws NoSuchLeverandoerIdException, NullValueException
    {
        if(beskrivelse != null && leverandoerNavn != null && vareId != 0 && navn != null && pris != 0 && lokation != null && tilbudsPris != 0
                && navn.trim().length() != 0 && lokation.trim().length() != 0) // lav trim på alle tekstfelter
        {
            vareBeskrivelse = new VareBeskrivelse(beskrivelse,leverandoerNavn, vareId, navn, pris, lokation, tilbudsPris);
            
            if(leverandoerRegisterCtrl.findLeverandoer(leverandoerId) != null)
            {
                vareBeskrivelse.tilfoejLeverandoer(leverandoerRegisterCtrl.findLeverandoer(leverandoerId));
                vareKatalog.tilfoejProduktBeskrivelse(vareBeskrivelse);
            }
            else
            {
                throw new NoSuchLeverandoerIdException("Vælg et andet leverandørID");
            }
        }
        else
        {
            throw new NullValueException("Nogle af felterne er tomme!");
        }
    }
    
    /**
     * Metoden kalder tilfoejVare i VareKatalog og
     * tjekker samtidigt, at der ikke bestilles flere varer hjem
     * end der kan være på lageret
     * @param vareId Varens id
     * @param antal Det antal varen skal opdateres med
     * @return String Hvis det bestilte antal varer ikke kan
     * være på lageret, så får brugen besked
     */
    public String tilfoejVare(int vareId, int antal)
    {
        int index = 0;
        String besked = "";
        vareBeskrivelse = findVareBeskrivelseId(vareId);
        
//        if((antal+vareBeskrivelse.arrayStoerrelse()) > vareBeskrivelse.hentMaxLager())
//        {
//            return besked = "Der er bestilt flere varer hjem, end der kan være på lageret!";
//        }
//        else
//        {
            while(index < antal)
            {
                vareBeskrivelse.tilfoejVare(vareId);
                index++;
            }
        //}
        return besked;
    }
    
    /**
     * Finder en vare ud fra varens navn.
     * @param vareNavn Varens navn
     * @return Returnerer et objekt af typen Vare
     */
    public VareBeskrivelse findVareBeskrivelse(String vareNavn)
    {   
        return vareKatalog.findVareBeskrivelse(vareNavn);
    }
    
    /**
     * Finder en vare ud fra varens navn.
     * @param vareNavn Varens navn
     * @return Returnerer et objekt af typen Vare
     */
    public ArrayList<VareBeskrivelse> findVareBeskrivelse2(String vareNavn) throws NoSuchVareNavnException
    {   
        if(vareKatalog.findVareBeskrivelse2(vareNavn).size() >0)
        {
            return vareKatalog.findVareBeskrivelse2(vareNavn);
        }
        else
        {
            throw new NoSuchVareNavnException("Der blev ikke fundet nogle varer - vælg nyt navn!");
        }
    }
    
    /**
     * Finder en vare ud fra varens id.
     * @param vareNavn Varens navn
     * @return Returnerer et objekt af typen Vare
     */
    public VareBeskrivelse findVareBeskrivelseId(int vareId)
    {
        return vareKatalog.findVareBeskrivelseId(vareId);   
    }
     
    
    /**
     * Opdaterer en given vare ud fra varens identifikationsnummer
     * @param vareId Varens identifikationsnummer
     */
    public void opdaterVareBeskrivelse(int id, String beskrivelse, String navn, double pris, String lokation)
    {
        vareKatalog.opdaterVareBeskrivelse(id, beskrivelse, navn, pris, lokation);  
    }
   
    /**
     * Sletter en vare ud fra varens identifikationsnummer
     * @param vareId Varens identifikationsnummer
     */
    public void sletVare(int vareId)
    {
        
    }
    
    /**
     * Opdaterer antallet af en given vare ud fra varens identifikationsnummer
     * @param vareId Varens identifikationsnummer
     * @param antal Antal, der skal opdateres med
     */
    public void opdaterAntal(String vareNavn, int antal)
    {
        vareBeskrivelse = findVareBeskrivelse(vareNavn);
        vareBeskrivelse.opdaterAntal(antal);
    }
    
    public String findLeverandoerNavn(int id) throws NoSuchLeverandoerIdException
    {
        if(leverandoerRegisterCtrl.findLeverandoer(id) != null)
            {
                 return leverandoerRegisterCtrl.findLeverandoer(id).hentNavn();
            }
            else
            {
                throw new NoSuchLeverandoerIdException("Vælg et andet leverandørID");
            }
    }
}
